iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
1
自我挑戰組

What a good thing we lose? What a bad thing we knew?系列 第 3

【Day 3】 在Visual Studio 2017 建立身分證產生器

  • 分享至 

  • xImage
  •  

大家好,今天跟大家一起學習如何寫一個身分證產生器。

身份證字號規則說明如下:

確認一組身分證號碼是否合法??
1.目前的中華民國身分證字號一共有十碼,包括起首一個大寫的英文字母與接續的九個阿拉伯數字。
  (1)英文代號以下表轉換成數字
   A=10 台北市   J=18 新竹縣   S=26 高雄縣
   B=11 台中市   K=19 苗栗縣   T=27 屏東縣
   C=12 基隆市   L=20 台中縣   U=28 花蓮縣
   D=13 台南市   M=21 南投縣   V=29 台東縣
   E=14 高雄市   N=22 彰化縣   W=32 金門縣
   F=15 台北縣  O=35 新竹市   X=30 澎湖縣
   G=16 宜蘭縣   P=23 雲林縣   Y=31 陽明山
   H=17 桃園縣   Q=24 嘉義縣   Z=33 連江縣
   I=34 嘉義市  R=25 台南縣 
  (2),而首位數字則是拿來區分性別,男性為1、女性為2,
2.規則說明:
   (1)英文轉成的數字, 個位數乘9再加上十位數
   (2)各數字從右到左依次乘1、2、3、4....8
   (3)求出(1),(2)之和
   (4)求出(3)除10後之餘數,用10減該餘數,結果就是檢查碼,若餘數為0
     檢查碼就是0

題外話:
身分證的「Y」所代表的正是臺北市內著名觀光景點─陽明山。而臺灣境內有這麼多座山,卻只有陽明山有如此特別地位,是因為民國三十八年國民政府初撤退來臺之初,陽明山便被作為蔣中正的臨時駐紮之處,也因為軍事等需求,政府在該年便將陽明山以及當時仍屬臺北縣士林鎮、北投鎮等區域,劃歸為特別設立的草山管理處(隔年改名為陽明山管理局)進行管理

本文開始:

Step 1. 寫一個Function

 region 產生虛擬身分證
  public string CreateVid(bool sex, int city)
    {    //身分證開頭英文
         /*              
          (1)英文代號以下表轉換成數字 
       A=10 台北市 city索引值(0)  J=18 新竹縣 city索引值(9)   S=26 高雄縣 city索引值
       B=11 台中市 city索引值(1)  K=19 苗栗縣 city索引值(10)  T=27 屏東縣 city索引值(16) 
       C=12 基隆市 city索引值(2)  L=20 台中縣 city索引值       U=28 花蓮縣 city索引值(17) 
       D=13 台南市 city索引值(3)  M=21 南投縣 city索引值(11)  V=29 台東縣 city索引值(18) 
       E=14 高雄市 city索引值(4)  N=22 彰化縣 city索引值(12)   W=32 金門縣 city索引值(19) 
       F=15 台北縣 city索引值(5)  O=35 新竹市 city索引值(13)  X=30 澎湖縣 city索引值(20) 
       G=16 宜蘭縣 city索引值(6)  P=23 雲林縣 city索引值(14)  Y=31 陽明山 city索引值 
       H=17 桃園縣 city索引值(7)  Q=24 嘉義縣 city索引值(15)   Z=33 連江縣 city索引值(21)
        I=34 嘉義市 city索引值(8)  R=25 台南縣 city索引值
      */

        string[] county_E = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
                      "M", "N", "O", "P", "Q", "T", "U", "V", "W", "X", "Z" };
        //對應數字 (索引值)
        int[] county_i = { 10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 21, 22, 35,
                       23, 24, 27, 28, 29, 32, 30, 33 };
        Random r = new Random();
        string id = county_E[city];
        int c_i = county_i[city];
        string s = "2";
        if (sex) s = "1";
        int rand_i = r.Next(0, 10000000);
        //計算
        int check = (c_i / 10) + 9 * (c_i - (c_i / 10) * 10) + Convert.ToInt32(s) * 8;
        for (int i = 7; i >= 1; i--)
        {
            check += ((rand_i / (int)Math.Pow(10, i - 1)) % 10) % 10 * i;
        }
        check = (10 - (check % 10)) % 10;
        //計算審核碼
        id += s + rand_i.ToString().PadLeft(7, '0') + check.ToString();
        return id;
    }
    #endregion
 
 

Step 2 創建一個View,使用建立的function

     public ActionResult Demo() {

        //CreateVid(true:男,false:女, 縣市索引值)
        ViewBag.ID = CreateVid(false, 21); //連江縣 Z

        return View();
    }
    

https://ithelp.ithome.com.tw/upload/images/20181017/20112000jr1fzwdDzC.png

Step 3. 成功畫面
https://ithelp.ithome.com.tw/upload/images/20181017/20112000mNXljwae2s.png

參考資料:

  1. 身份證字號規則 http://www2.lssh.tp.edu.tw/~hlf/class-1/lang-c/id/index.htm
  2. 題外話 https://www.ebcbuzz.com/watch/26312

上一篇
【Day 2】 在Visual Studio 2017 建立 localDB資料庫 (2/2)
下一篇
【Day 4】 在Visual Studio 2017 建立身分證驗證器
系列文
What a good thing we lose? What a bad thing we knew?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言